package geektime.spring.springbucks.service;

import geektime.spring.springbucks.mondel.Coffee;
import geektime.spring.springbucks.mondel.CoffeeOrder;
import geektime.spring.springbucks.mondel.OrderState;
import geektime.spring.springbucks.repository.CoffeeOrderRepository;
import java.util.ArrayList;
import java.util.Arrays;
import javax.transaction.Transactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@Transactional
public class CoffeeOrderService {

  @Autowired
  private CoffeeOrderRepository coffeeOrderRepository;

  public CoffeeOrder createOrder(String customer, Coffee... coffee) {
    CoffeeOrder order = CoffeeOrder.builder().customer(customer)
        .items(new ArrayList<>(Arrays.asList(coffee))).state(
            OrderState.INIT).build();
    CoffeeOrder saved = coffeeOrderRepository.save(order);
    log.info("New Order:{}",saved);
    return saved;

  }

  public boolean updateState(CoffeeOrder coffeeOrder,OrderState orderState){
    if(orderState.compareTo(coffeeOrder.getState())<=0){
      log.warn("Wrong State order:{}.{}",orderState,coffeeOrder.getState());
      return false;
    }
    coffeeOrder.setState(orderState);
    coffeeOrderRepository.save(coffeeOrder);
    log.info("Updated Oder:{}",coffeeOrder);
    return true;
  }
}
